package com.ys.day28.socket通信方式;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

/**
 * 描述: Java的TCP通信有三种
 * 1: 单工通信 : 所谓单工通信，是指消息只能单方向传输的工作方式。例如遥控、遥测，就是单工通信方式
 * 2:解释:单工通信信道是单向信道，发送端和接收端的身份是固定的，发送端只能发送信息，不能接收信息；接收端只能接收信息，不能发送信息，数据信号仅从一端传送到另一端，即信息流是单方向的。
 * 通信双方采用“按——讲”（Push To Talk,PTT）单工通信属于点到点的通信。根据收发频率的异同，单工通信可分为同频通信和异频通信
 *
 * @author CodeYang
 * @version 2021/1/8 19:33
 */
public class P1单工通信 {

    /**
     * 模拟实现 单工通信;
     * 已知: 单工通信的发送端 和 接收反身份是固定的:
     * 例如;客户端和服务器建立连接成功(必须建立连接,前置条件)，服务器向客户端发送响应信息
     *   单工通信的特点: 一个out,一个in
     * @param args
     */
    public static void main(String[] args) {

    }


}

/**
 * 服务端类,只发送信息
 */
class ServeSocket {


    public static void main(String[] args) {
        try (
                /**
                 *  注册 服务
                 */
                ServerSocket serverSocket = new ServerSocket(45536);
                /**
                 * 监听要建立到此套接字的连接并接受它。该方法会阻塞，直到建立连接。
                 */

                Socket accept = serverSocket.accept()
        ){
            System.out.println("建立连接中-------");
            System.out.println("访问对象"+accept);
            OutputStream outputStream = accept.getOutputStream();
            // 使用字符输出流修饰输出
            BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(outputStream));
            bufferedWriter.write(String.valueOf(System.currentTimeMillis()));
            //回车符,告诉客户我已经写完了,
           // bufferedWriter.newLine();
            bufferedWriter.flush();

        }catch (Exception e){
                e.printStackTrace();
        }
    }
}


/**
 *  客户端类: 建立连接,只接受信息
 */
class ClientSocket{

    public static void main(String[] args) {

        try (
                // 创建客户端套接字
                /**
                 *  1: 服务端地址,
                 *  2: 约定唯一进程端口号
                 */
                Socket socket = new Socket("127.0.0.1",45536);
                InputStream is = socket.getInputStream();
                /**
                 *  包装类转换流 new InputStreamReader(is)
                 */
                BufferedReader bri = new BufferedReader( new InputStreamReader(is))

        ) {
            System.out.println("请求连接");
                // 客户端读取一行,读到服务器的 结束标志
            String result = bri.readLine();
            System.out.println("接收到来自系统的信息"+result);
        }catch (IOException e) {
            e.printStackTrace();
        }

        // 客户端接收服务器响应的数据  in 对 out

    }
}
